<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>1.递归实现数组长度为5且元素值为2-32间不重复的随机数</title>
</head>
<body>

</body>
<script>
  /*
    这是一个大题目，考点主要是以下四个小项：
    1. 生成一个长度为5的空数组arr
    2. 生成一个2-32之间的随机整数num
    3. 把随机数num插入到数组arr内，如果数组arr内已存在与num相同的数字，则重新生成随机数num并插入到arr内
    4. 最终输出一个长度为5，且内容不重复的数组arr
  */

  function setArr(arr,length,min,max){
    if(arr.length>=length) return arr
    const num = Math.floor(Math.random() * (max - min + 1) + min)
    if(!arr.includes(num)) arr.push(num)
    return setArr(arr,length,min,max)
  }
  console.log(setArr([], 5, 2, 32))

  /*
    生成一个 min-max 之间的随机数：
      Math.floor(Math.random() * (max - min + 1) + min)
    详解：
      1. Math.random() 生成的是0-1之间，但不包括1的随机数，是一个浮点数。
      2. Math.random() + min 实现最小为min，因为random函数生成的最小值是0，加上min，最小就是min。
      3. Math.random() * (max - min + 1), 实现从0往上，但不超过 max-min+1 的数。
      比如max为32，min为2，由于第二步加了2，于是得出最大数应该为32-2=30。
      又由于random函数最大不超过 1，所以Math.random()*30最大不会超过30，Math.random()*31最大不会超过31，
      向下取整后，Math.random()*31的最大值就是30。
      Math.random()*31用另一种说法来解释，可以理解为获取31的百分之多少，
      因为能获得的最大值不可能是31的100%，能获取的最大就是31的99.999...%，
      所以最大不可能等于31，只能是小于31，而小于31里面最大的整数就是30。
  */
</script>
</html>
